MediaConvert で WebVTT から DVB-Sub 形式へのキャプション変換をやってみた
こんにちは、大前です。
動画変換等によく利用される AWS Elemental MediaConvert(以下 MediaConvert)は、動画や音声の処理だけでなく、キャプション(≒字幕)に関する処理も行う事が可能です。
今回は、MediaConvert を利用して、動画へのキャプション設定の変換をやってみたいと思います。
やりたい事
以下の処理を MediaConvert を利用して実施します。
- 入力
- mp4 動画ファイル
- WebVTT によるサイドカー形式のキャプション
- 出力
- hls 形式のストリーミング動画ファイル
- DVB-Sub による埋め込み型のキャプション
WebVTT、DVB-Sub はそれぞれ動画にキャプションを埋め込むフォーマットになります。WebVTT は動画ファイルとは別にキャプション用のファイルを用意する方式(サイドカー)で、DVB-Sub は動画ファイルに画像として直接キャプション情報を焼き付ける様な方式です。キャプションの挿入フォーマットはそれぞれ対応しているデバイスや再生環境などが異なるため、目的に応じて使い分ける形になります。そのため、動画形式だけでなく、字幕についても変換が必要となる場合があります。
キャプションに関する処理を行う場合、動画の入出力形式によってサポートされているキャプション形式は異なります。
以下ドキュメントに MediaConvert が対応可能なパターンが記載されているので、キャプションに関する処理を行う際はチェックしましょう。
やってみる
実際に MediaConvert による上記変換を実施してみます。
0.変換元ファイルの準備
変換元ファイルをそれぞれ準備します。
動画は 720p のよくある mp4 ファイルを用意しました。キャプションは WebVTT のサイドカー形式で持っているため、動画ファイル自体にはキャプショントラックが存在しない事が確認できます。
入力キャプションとして扱う WebVTT ファイルは以下を用意しました。 1〜5秒で「Hello, World.」という文字を表示させる形になっています。WebVTT フォーマットを詳しく知りたい方は こちら などを参照ください。
WEBVTT 00:01.000 --> 00:05.000 Hello, World.
上記 2ファイルをそれぞれ S3 にアップロードしておきます。
1.MediaConvert ジョブ作成
MediaConvert の変換ジョブを作成します。細かい操作については割愛しますが、細かい部分も確認したい方は以下ブログを参照ください。
入力ファイルに事前に S3 にアップロードしておいた上記の動画ファイルを指定します。
入力に関する設定画面のまま下にスクロールすると「キャプションセレクタの追加」というボタンがあるのでクリックし、「ソース」に "WebVTT"、「ソースファイル」に事前に用意し S3 にアップロードしておいた WebVTT ファイルを指定します。
「出力グループの追加」で "Apple HLS" を選択し、送信先は適当な S3 を指定します。
出力設定を開き、「キャプションの追加」をクリックするとキャプションに関する設定が追加されます。
「キャプションソース」に "Captions Selector 1"、「送信先タイプ」に "DVB-Sub"、「フォントサイズ」に "16"、「フォント色」に "赤" を指定します。その他にも色々な設定があるので触ってみると面白いと思います。
動画に関する解像度やビットレートの設定、MediaConvert が使用する IAM ロールの指定などを行い、ジョブの作成を行います。
少し待つと、ジョブのステータスが "COMPLETE" になりました。
2.出力された動画ファイルを確認
MediaConvet のジョブによって生成された動画ファイルを確認していきます。
生成された動画ファイル(今回は HLS 出力なので ts ファイル)をダウンロードして MediaInfo で確認してみると、Text トラックが追加されている事がわかります。
実際に動画を再生して確認してみます。DVB-Sub に対応しているプレイヤーを利用する必要があるので、今回は VLC media player を利用しました。
VLC media player で DVB-Sub 字幕を表示させる設定にして動画を再生してみると、入力として用意した WebVTT ファイルの通りに字幕が挿入されている事が確認できました。
おわりに
元々は MediaLive に関する以下のアップデートを見かけてブログを書こうとした所、そもそも DVB-Sub がよくわかっていなかったため MediaConvert で生成してみようと思いこのブログを書きました。
キャプション形式の違いを学ぶ良い機会になりましたし、また MediaConvert で字幕周りの処理を試した経験がほぼなかったので、楽しかったです。 上記アップデートに関するブログも、そのうち書きたいと思っています。
以上、AWS 事業本部の大前でした。